home *** CD-ROM | disk | FTP | other *** search
- /* sockadapt.h
- *
- * Authors: Charles Bailey bailey@genetics.upenn.edu
- * David Denholm denholm@conmat.phys.soton.ac.uk
- * Last Revised: 17-Mar-1995
- *
- * This file should include any other header files and procide any
- * declarations, typedefs, and prototypes needed by perl for TCP/IP
- * operations.
- *
- * This version is set up for perl5 with socketshr 0.9D TCP/IP support.
- */
-
- /* SocketShr doesn't support these routines, but the DECC RTL contains
- * stubs with these names, designed to be used with the UCX socket
- * library. We avoid linker collisions by substituting new names.
- */
- #define getnetbyaddr no_getnetbyaddr
- #define getnetbyname no_getnetbyname
- #define getnetent no_getnetent
- #define setnetent no_setnetent
- #define endnetent no_endnetent
-
-
- #ifdef __GNU_CC__
-
- /* we may not have netdb.h etc, so lets just do this here - div */
- /* no harm doing this for all .c files - needed only by pp_sys.c */
-
- struct hostent {
- char *h_name; /* official name of host */
- char **h_aliases; /* alias list */
- int h_addrtype; /* host address type */
- int h_length; /* length of address */
- char **h_addr_list; /* address */
- };
- #ifdef h_addr
- # undef h_addr
- #endif
- #define h_addr h_addr_list[0]
-
- struct protoent {
- char *p_name; /* official protocol name */
- char **p_aliases; /* alias list */
- int p_proto; /* protocol # */
- };
-
- struct servent {
- char *s_name; /* official service name */
- char **s_aliases; /* alias list */
- int s_port; /* port # */
- char *s_proto; /* protocol to use */
- };
-
- struct in_addr {
- unsigned long s_addr;
- };
-
- struct sockaddr {
- unsigned short sa_family; /* address family */
- char sa_data[14]; /* up to 14 bytes of direct address */
- };
-
- /*
- * Socket address, internet style.
- */
- struct sockaddr_in {
- short sin_family;
- unsigned short sin_port;
- struct in_addr sin_addr;
- char sin_zero[8];
- };
-
- struct timeval {
- long tv_sec;
- long tv_usec;
- };
-
- struct netent {
- char *n_name;
- char **n_aliases;
- int n_addrtype;
- long n_net;
- };
-
- /* Since socketshr.h won't declare function prototypes unless it thinks
- * the system headers have already been included, we convince it that
- * this is the case.
- */
-
- #ifndef AF_INET
- # define AF_INET 2
- #endif
- #ifndef IPPROTO_TCP
- # define IPPROTO_TCP 6
- #endif
- #ifndef __INET_LOADED
- # define __INET_LOADED
- #endif
- #ifndef __NETDB_LOADED
- # define __NETDB_LOADED
- #endif
-
- /* Finally, we provide prototypes for routines not supported by SocketShr,
- * so that the stubs in sockadapt.c won't cause complaints about
- * undeclared routines.
- */
-
- struct netent *getnetbyaddr( long net, int type);
- struct netent *getnetbyname( char *name);
- struct netent *getnetent();
- void setnetent();
- void endnetent();
-
- #else /* !__GNU_CC__ */
-
- /* DECC and VAXC have socket headers in the system set; they're for UCX, but
- * we'll assume that the actual calling sequence is identical across the
- * various TCP/IP stacks; these routines are pretty standard.
- */
- #include <socket.h>
- #include <in.h>
- #include <inet.h>
- #include <netdb.h>
- /* However, we don't have these two in the system headers. */
- void setnetent();
- void endnetent();
-
- #endif
-
- #include <socketshr.h>
- /* socketshr.h from SocketShr 0.9D doesn't alias fileno; it's comments say
- * that the CRTL version works OK. This isn't the case, at least with
- * VAXC, so we use the SocketShr version.
- * N.B. This means that sockadapt.h must be included *after* stdio.h.
- * This is presently the case for Perl.
- */
- #ifdef fileno
- # undef fileno
- #endif
- #define fileno si_fileno
- int si_fileno(FILE *);
-